package monitor

import (
	"gitee.com/rw555/fdsmastergo/pkg/keypad"
	"gitee.com/rw555/fdsmastergo/pkg/logger"
	"gitee.com/rw555/fdsmastergo/pkg/state"
	"go.uber.org/zap"
)

// KeyEventCallback 按键事件回调函数
func (m *Monitor) OnShortPress(key keypad.Key) {
	m.cmdChan <- Command{
		Type: CommandTypeKey,
		Data: KeyCommandData{
			Key:            key,
			KeyConfirmType: keypad.KeyConfirmTypeShort}}

}

// KeyEventCallback 按键事件回调函数
func (m *Monitor) OnLongPress(key keypad.Key) {
	m.cmdChan <- Command{
		Type: CommandTypeKey,
		Data: KeyCommandData{
			Key:            key,
			KeyConfirmType: keypad.KeyConfirmTypeLong}}
}

// KeyEventCallback 按键事件回调函数
func (m *Monitor) OnSuperLongPress(key keypad.Key) {
	m.cmdChan <- Command{
		Type: CommandTypeKey,
		Data: KeyCommandData{
			Key:            key,
			KeyConfirmType: keypad.KeyConfirmTypeSuperLong}}
}

// 处理具体的按键命令
func (m *Monitor) HandleKeyCommand(data KeyCommandData) {
	//logger.OperatorError("按键命令", zap.Any("data", data))
	if data.KeyConfirmType == keypad.KeyConfirmTypeShort {
		switch data.Key {
		case keypad.KeyMenu:
			if m.mode.HasMode(state.ModeAuto) {
				m.StopAutoMode()
			} else {
				m.StartAutoMode()
			}
		case keypad.KeyF1:
			logger.OperationError("F1键短按， 未实现")
		case keypad.KeyF2:
			logger.OperationError("F2键短按， 未实现")
		case keypad.KeyF3:
			logger.OperationError("F3键短按， 未实现")
		}
	} else if data.KeyConfirmType == keypad.KeyConfirmTypeLong {
		switch data.Key {
		case keypad.KeyMenu:
			logger.OperationError("菜单键长按， 未实现")
		case keypad.KeyF1:
			if m.mode.HasMode(state.ModeForceHeat) {
				m.StopForceHeat()
			} else {
				m.StartForceHeat()
			}
		case keypad.KeyF2:
			if m.mode.HasMode(state.ModeForcePump) {
				m.StopForcePump()
			} else {
				m.StartForcePump()
			}
		case keypad.KeyF3:
			logger.OperationError("F3键长按， 未实现")
		}
	} else if data.KeyConfirmType == keypad.KeyConfirmTypeSuperLong {
		switch data.Key {
		case keypad.KeyMenu:
			logger.OperationError("菜单键超长按， 未实现")
		case keypad.KeyF1:
			logger.OperationError("F1键超长按， 未实现")
		case keypad.KeyF2:
			logger.OperationError("F2键超长按， 未实现")
		case keypad.KeyF3:
			logger.OperationError("F3键超长按， 未实现")
		}
	}
}

func (m *Monitor) HandleEventCommand(data EventCommandData) {
	logger.OperationInfo("事件命令", zap.Any("data", data))
	switch data.EventName {
	case EventNameDelayClosePump:
		// 关闭泵
		if err := m.device.ClosePump(); err != nil {
			logger.OperationError("关闭泵失败", zap.Error(err))
			return
		}
		m.power = 0
		m.device.SetPumpPower(m.power)

		// 如果当前是退出自动模式状态，则切换到停机状态
		if m.mode.HasMode(state.ModeExitingAuto) {
			m.mode = state.ModeNone
			logger.OperationInfo("自动模式已完全关闭")
		}
	}
}
